×

Как подружить вывод материала полученного с помощью getCollection от pdofetch с пагинацией страниц на pdoPage

Как подружить вывод материала полученного с помощью getCollection от pdofetch с пагинацией страниц на pdoPage.

Все, кто писал свой снипет для модекс ( modx ), и в котором ресурсы каталога выводил используя метод getCollection класса pdofetch - столкнулся с проблемой корректного вывода постраничной навигации и вывода отдельных страниц каталога.



Здесь описаны основные этапы решения этого вопроса.
1. Копируем файл pdofetch.class.php в пуже папку под другим именем, например  pdofetchcoll.class.php . Мы создадим ноый класс pdofetchcoll, который будет расширением класса pdotools. Это сделано для предотвращения потери наших изменений при очередном обновлении дополнения pdotools.
2. В классе pdofetchcoll создадим новый метод getCollectionMy, который является клоном метода getCollection.
3. Именим метод getCollectionMy следующим образом: (строчки помеченные myAdd добавляются в скрипт)
    ...
    $config['class'] = $class;
        
    $config['totalVar'] = 'page.total';          //          myAdd
        
    $config['limit'] = !isset($config['limit']);
    ...
        if ($instance->query->stmt->execute()) {

           $instance->addTime('SQL executed', microtime(true) - $tstart);

            $instance->modx->queryTime += microtime(true) - $tstart;

            $instance->modx->executedQueries++;

            $tstart = microtime(true);

            $instance->setTotal();                               //  myAdd

            if (!$rows = $instance->query->stmt->fetchAll(PDO::FETCH_ASSOC)) {

                $rows = array();

            } else {

                $rows = $instance->checkPermissions($rows);

                $rows = $instance->prepareRows($rows);

            }
    ...
    Вот видите, нам потребовалось всего 2 строчки кода!
4. Осталось только подключить созданный класс pdofetchcoll в начало тела вашего снипета.
 
/** @var pdoFetchcoll $pdoFetch */

$fqn = $modx->getOption('pdoFetchcoll.class', null, 'pdotools.pdofetch', true);

if ($pdoClass = $modx->loadClass($fqn, '', false, true)) {

    $pdoFetch = new $pdoClass($modx, $scriptProperties);

}
elseif ($pdoClass = $modx->loadClass($fqn, MODX_CORE_PATH . 'components/pdotools/model/', false, true)) {

    $pdoFetch = new $pdoClass($modx, $scriptProperties);

}
else {

    $modx->log(modX::LOG_LEVEL_ERROR, 'Could not load pdoTools from "MODX_CORE_PATH/components/pdotools/model/".');
    return false;

}

Вот и все, удачных вам написанных программ!

25 апреля 2016, 00:00    Вечерний Минск    391

Комментарии ()